package com.lujieni.springbootjvm.classloader;

/**
 *
 * 当线程对flag = true;进行写操作的时候如果有另一个线程准备读,那么不好意思
 * 另一个读操作的线程必须等到写操作的线程执行完成之后才能读取,这就是Happen before原则
 */
public class VolatileTest {

    int i = 0;
    volatile boolean flag = false;

    // Thread A
    public void write(){
        i = 2;              // 1
        flag = true;        // 2
    }

    // Thread B
    public void read(){
        if(flag) {                                   // 3
            System.out.println("---i = " + i);       // 4
        }
    }

    public static void main(String[] args) {

        VolatileTest volatileTest = new VolatileTest();

        new Thread(()->{
            volatileTest.write();
        }).start();

        new Thread(()->{
            volatileTest.read();
        }).start();

    }
}
